package projetDames.jeu;

import projetDames.composant.Commun;
import projetDames.composant.Piece;
import projetDames.composant.Pointp;

public class JoueurHumain extends Joueur implements Commun {

	private static final long serialVersionUID = 1L;

	private boolean deplacer;
	private boolean manger;
	private boolean selectionner;
	private Pointp abP;

	private Pointp tempP;
	private Piece temp;

	private boolean peutPasJouerAutrePart;

	public JoueurHumain(int i, boolean c) {
		super(i, c);
	}

	public String getTyperJoueur() {
		return "Humain";
	}

	public void jouerUnCoup(Jeu jeuCourant, int x, int y) {
		int a = y / _DIA;
		int b = x / _DIA;

		if (!caseVide(jeuCourant, a, b)) {
			if (bonneCouleur(jeuCourant, a, b)) {

				System.out.println("" + this + " : ");
				System.out.println(jeuCourant.getPlateau().obligationDeJouer(
						this.getCouleurJoueur()));
				int size = jeuCourant.getPlateau().obligationDeJouer(
						this.getCouleurJoueur()).size();
				Pointp pOblig = new Pointp(a, b);
				peutPasJouerAutrePart = false;

				if (jeuCourant.getPlateau().obligationDeJouer(
						this.getCouleurJoueur()).isEmpty()) {
					peutPasJouerAutrePart = true;
				} else {
					for (int i = 0; i < size; i++) {
						System.out.println("pOblig : " + pOblig);
						System.out.println("get i : "
								+ jeuCourant.getPlateau().obligationDeJouer(
										this.getCouleurJoueur()).get(i));
						if (pOblig.egal(jeuCourant.getPlateau()
								.obligationDeJouer(this.getCouleurJoueur())
								.get(i))) {
							peutPasJouerAutrePart = true;
						}

					}
				}

				if (peutPasJouerAutrePart) {
					jeuCourant.getHisto().modifierZoneText(
							"Au joueur " + this.getIdJoueur() + " de jouer :"
									+ _NEWLINE);
					selectionnerPiece(jeuCourant, a, b);
					selectionner = true;
					jeuCourant.getHisto().modifierZoneText(
							"on selection le pion" + _NEWLINE);
				} else {
					jeuCourant.getHisto().modifierZoneText(
							"Vous pouvez jouer autre part !" + _NEWLINE);
				}
			} else {
				jeuCourant.getHisto().modifierZoneText(
						"ceci n'est pas votre pion" + _NEWLINE);
			}
		} else {
			if (selectionner) {
				jouerPiece(jeuCourant, this.temp, a, b);
				jeuCourant.getHisto().modifierZoneText(
						"on joue le pion" + _NEWLINE);
				selectionner = false;
			}

		}

	}

	public void selectionnerPiece(Jeu jeuCourant, int a, int b) {
		this.temp = jeuCourant.getPlateau().pionOuDame(a, b);
		jeuCourant.getHisto().modifierZoneText(
				"on part de (a,b) : (" + a + "," + b + ")" + _NEWLINE);
		tempP = new Pointp(a, b);
		this.temp.meilleurChemin(tempP, 0);
		jeuCourant.getHisto().modifierZoneText(
				"on peut aller en : " + this.temp.getMeilleurChemin()
						+ _NEWLINE);

	}

	public void jouerPiece(Jeu jeuCourant, Piece temp, int a, int b) {
		deplacer = false;
		manger = false;
		abP = new Pointp(a, b);
		this.temp = temp;

		for (int i = 0; i < this.temp.getMeilleurChemin().size(); i++) {
			for (int j = 0; j < this.temp.getMeilleurChemin().get(i).size(); j++) {
				if (this.temp.getMeilleurChemin().get(i).get(j).egal(abP)) {

					if (this.temp.getMeilleurChemin().get(i).size() > 1) {
						manger = true;
						deplacer = true;
					} else {
						if (this.temp.getMeilleurChemin().get(i).size() == 1) {
							deplacer = true;
							manger = false;

						}

					}
				}
			}
		}

		if (manger) {
			mangerPiece(jeuCourant, this.temp, abP);
		}
		if (deplacer) {
			deplacePiece(jeuCourant, this.temp, abP);
			// insertionDame(jeuCourant, abP);
			jeuCourant.setSucces(!jeuCourant.getSucces());

		} else {
			jeuCourant.getHisto().modifierZoneText(
					"erreur deplacement" + _NEWLINE);
		}
	}

}
